export default class MyEvent {

  constructor() {
    // handlers 存储各种不同的事件绑定的函数
    // handlers => {事件名称 : [f1,f2,f3....], 事件名称1: [f4, f5,f1]}

    this.handlers = {};
  }

  // 给指定的事件绑定函数，给指定的 事件收集 要执行的函数
  on(evname, handler) {
    // 如果evname 所对应的数组不存在，则表示第一次绑定该事件，就需要初始化一下数组
    if (!Array.isArray(this.handlers[evname])) {
      this.handlers[evname] = [];
    }
    // 添加函数到指定事件数组中
    this.handlers[evname].push(handler);
  }

  // 触发指定的事件，执行on中收集对应函数数组，并传入数据
  emit(evname, data) {
    const handlers = this.handlers[evname];
    if (Array.isArray(handlers)) {
      // 循环指定事件所对应的方法
      for (let i=0; i<handlers.length; i++) {
        // 传入data
        handlers[i](data);
      }
    }
  }

}